/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.EvalEVCIndi;
import co.com.sed.model.beans.PreguntaEVC;
import co.com.sed.model.beans.Calificacion;
import co.com.sed.model.beans.RespuestaEVC;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class RespuestaEVCPeer {

	private static final String BUSCAR_RESPUESTASEVC =
		"SELECT id_respuesta_evc, calificacion, pregunta_evc, id_eval_evc_indiv, observacion  FROM respuesta_evc ";

	private static final String BUSCAR_RESPUESTAEVC  =	
		"SELECT id_respuesta_evc, calificacion, pregunta_evc, observacion, id_eval_evc_indiv  FROM respuesta_evc "+
		"WHERE id_respuesta_evc = &id_respuesta_evc";
	
	private static final String BUSCAR_RESPUESTAEVC_POR_PREGUNTAEVC  =	
		"SELECT id_respuesta_evc, calificacion, pregunta_evc, observacion, id_eval_evc_indiv  FROM respuesta_evc "+
		"WHERE pregunta_evc = &pregunta_evc";
	
	
	private static final String BUSCAR_RESPUESTAEVC_POR_CALIFICACION  =	
		"SELECT id_respuesta_evc, calificacion, pregunta_evc, observacion, id_eval_evc_indiv  FROM respuesta_evc "+
		"WHERE calificacion = &calificacion";
	

	private static final String INSERTAR_RESPUESTAEVC  =
		"INSERT INTO respuesta_evc (calificacion, pregunta_evc, observacion, id_eval_evc_indiv ) VALUES "+
		"(calificacion, pregunta_evc, observacion, id_eval_evc_indiv )";

	private static final String UPDATE_RESPUESTAEVC =
		"UPDATE respuesta_evc "+
		"SET calificacion = &calificacion , pregunta_evc = &pregunta_evc , observacion = '&observacion', id_eval_evc_indiv = &id_eval_evc_indiv "+
		"WHERE id_respuesta_evc = &id_respuesta_evc";

	private static final String DELETE_RESPUESTAEVC =
		"DELETE FROM respuesta_evc "+
		"WHERE id_respuesta_evc = &id_respuesta_evc";

	
		
	/** busca en la base de datos todos los registros de la tabla "respuesta_evc"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de respuestas_evc
	* @see         				RespuestaEVC, Statement
	*/
	public static ArrayList<RespuestaEVC> buscarRespuestasEVC(Statement stmt) {
		ArrayList<RespuestaEVC> respuestas_evc = new ArrayList<RespuestaEVC>();

		String sql = BUSCAR_RESPUESTASEVC; //"SELECT id_respuesta_evc, observacion, rango FROM respuesta_evc ";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					RespuestaEVC resevc = new RespuestaEVC();

					resevc.setIdRespuestaEVC(rs.getInt("id_respuesta_evc"));
					resevc.setCalificacion(new Calificacion(rs.getInt("calificacion")));
					resevc.setPreguntaEVC(new PreguntaEVC(rs.getInt("pregunta_evc")));
					resevc.setEvalEVCIndi(new EvalEVCIndi(rs.getInt("id_eval_evc_indiv")));
					resevc.setObservacion(rs.getString("observacion"));
					
					
					
					respuestas_evc.add(resevc);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return respuestas_evc;
	}
	
	/** busca en la base de datos un registro de la tabla "respuesta_evc"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idRespuestaEVC		    id de la respuesta_evc que se desea cosultar
	* 
	* @return					respuesta_evc buscada
	* @see         				RespuestaEVC, Statement
	*/
	public static RespuestaEVC buscarRespuestaEVC(Statement stmt, int idRespuestaEVC) {
		RespuestaEVC respuesta_evc = new RespuestaEVC();

		String sql = BUSCAR_RESPUESTAEVC;
		//"SELECT id_respuesta_evc, observacion, rango FROM respuesta_evc "+
		//"WHERE id_respuesta_evc = &id_respuesta_evc";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_respuesta_evc","" + String.valueOf(idRespuestaEVC));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
									
					respuesta_evc.setIdRespuestaEVC(rs.getInt("id_respuesta_evc"));
					respuesta_evc.setCalificacion(new Calificacion(rs.getInt("calificacion")));
					respuesta_evc.setPreguntaEVC(new PreguntaEVC(rs.getInt("pregunta_evc")));
					respuesta_evc.setEvalEVCIndi(new EvalEVCIndi(rs.getInt("id_eval_evc_indiv")));
					respuesta_evc.setObservacion(rs.getString("observacion"));
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return respuesta_evc;
	}
	
	
	/** busca en la base de datos todos los registros de la tabla "respuestaEVC" que pertenescan a un PreguntaEVC
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de respuestasEVC
	* @see         				RespuestaEVC, Statement
	*/
	public static ArrayList<RespuestaEVC> buscarRespuestaEVCPorPreguntaEVC(Statement stmt, int idPreguntaEVC) {
		ArrayList<RespuestaEVC> respuestasevc = new ArrayList<RespuestaEVC>();

		String sql = BUSCAR_RESPUESTAEVC_POR_PREGUNTAEVC;

		// se setean los "parametros"
		sql = sql.replaceAll("&pregunta_evc", "" + idPreguntaEVC);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					RespuestaEVC revc = new RespuestaEVC();
					
					revc.setIdRespuestaEVC(rs.getInt("id_respuesta_evc"));
					revc.setCalificacion(new Calificacion(rs.getInt("calificacion")));
					revc.setPreguntaEVC(new PreguntaEVC(rs.getInt("pregunta_evc")));
					revc.setEvalEVCIndi(new EvalEVCIndi(rs.getInt("id_eval_evc_indiv")));
					revc.setObservacion(rs.getString("observacion"));
											
					respuestasevc.add(revc);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return respuestasevc;
	}
	
	/** busca en la base de datos todos los registros de la tabla "RespuestaEVC" que pertenescan a un calificcion
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de RespuestasEVC
	* @see         				RespuestaEVC, Statement
	*/
	public static ArrayList<RespuestaEVC> buscarRespuestaEVCPorCalificacion(Statement stmt, int idCalificacion) {
		ArrayList<RespuestaEVC> respuestasevc = new ArrayList<RespuestaEVC>();

		String sql = BUSCAR_RESPUESTAEVC_POR_CALIFICACION;

		// se setean los "parametros"
		sql = sql.replaceAll("&calificacion", "" + idCalificacion);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					RespuestaEVC revc = new RespuestaEVC();
					
					revc.setIdRespuestaEVC(rs.getInt("id_respuesta_evc"));
					revc.setCalificacion(new Calificacion(rs.getInt("calificacion")));
					revc.setPreguntaEVC(new PreguntaEVC(rs.getInt("pregunta_evc")));
					revc.setEvalEVCIndi(new EvalEVCIndi(rs.getInt("id_eval_evc_indiv")));
					revc.setObservacion(rs.getString("observacion"));
											
					respuestasevc.add(revc);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return respuestasevc;
	}
	
	/** Inserta una RespuestaEVC en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param respuesta_evc		respuesta_evc que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarRespuestaEVC(Statement stmt, RespuestaEVC respuesta_evc) throws SQLException {
		int idNuevaRespuestaEVC = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_RESPUESTAEVC;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&calificacion", "" + respuesta_evc.getCalificacion())
					 .replaceAll("&pregunta_evc", "" + respuesta_evc.getPreguntaEVC())
			         .replaceAll("&id_eval_evc_indiv", "" + respuesta_evc.getEvalEVCIndi())
					 .replaceAll("&observacion", respuesta_evc.getObservacion());
					
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaRespuestaEVC = rs.getInt("id_respuesta_evc");
				Util.print("nuevo registro: " + idNuevaRespuestaEVC);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaRespuestaEVC;
	}
		
	
	/** Actualiza una respuesta_evc en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param respuesta_evc			respuesta_evc que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarRespuestaEVC(Statement stmt, RespuestaEVC respuesta_evc) throws SQLException {
		String sql = UPDATE_RESPUESTAEVC;
		 //se setean los "parametros": &id_respuesta_evc, &observacion
		sql = sql.replaceAll("&id_respuesta_evc", "" + respuesta_evc.getIdRespuestaEVC())
				 .replaceAll("&calificacion", "" + respuesta_evc.getCalificacion())
				 .replaceAll("&pregunta_evc", "" + respuesta_evc.getPreguntaEVC())
		         .replaceAll("&id_eval_evc_indiv", "" + respuesta_evc.getEvalEVCIndi())
				 .replaceAll("&observacion", respuesta_evc.getObservacion());
		
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un Respuesta_evc en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param Respuesta_evc		Respuesta_evc que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarRespuestaEVC(Statement stmt, RespuestaEVC respuesta_evc) throws SQLException {
		String sql = DELETE_RESPUESTAEVC;
		// se setean los "id_respuesta_evc = &id_respuesta_evc";
		sql = sql.replaceAll("&id_respuesta_evc", "" + respuesta_evc.getIdRespuestaEVC());

		stmt.executeUpdate(sql);
	}
	
}
